package com.li.onjava8.concurrent.cf.construct;

/**
 * 同步构造器并不被java语言所支持，但是通过使用同步语块来创建你自己的同步构造器是可能的
 * 我们可以通过创建自己的静态对象并锁定它，来达到与同步构造器相同的效果：
 */
class SyncConstructor implements HasId{

    private final int id;
    private static Object constructorLock = new Object();

    public SyncConstructor(SharedArg sa) {
        synchronized (constructorLock) {
            this.id = sa.get();
        }
    }

    @Override
    public int getID() {
        return id;
    }
}

public class SynchronizedConstructor{
    public static void main(String[] args){
        Unsafe unsafe = new Unsafe();
        IDChecker.test(() -> new SyncConstructor(unsafe));
    }
}
